package gestionCandidats;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

import modele.Dossier;
import modele.Etudiant;

public class EtudiantAfficheAction  extends AbstractAction  {

	/**
	 * 
	 */
	private static final long serialVersionUID = 4L;

	DemandeAfficheAction daa;

	GestionCandidats appli;
	JScrollPane scrollpane;
	JPanel vue;
	JPanel fiche;
	JButton suite, abondon;
	DossierAfficheAction dafa;
	Dossier dos;
	boolean creation;
	JComponent[][] attributs;
	Etudiant etu;

	// lors d'une consultation d'un dossier
	protected EtudiantAfficheAction(GestionCandidats appli, DossierAfficheAction dafa) {
		super("EtudiantAfficheAction");
		this.appli = appli;
		this.dafa = dafa;
		vue = appli.getEtudiantAffiche();
		creation = false;
	}	

	// lors d'une creation d'un dossier
//	protected EtudiantAfficheAction(GestionCandidats appli, DossierAfficheAction dafa,Dossier dos) {
//		super("EtudiantAfficheAction");
//		this.appli = appli;
//		this.dafa = dafa;
//		this.dos = dos;
//		vue = appli.getEtudiantAffiche();
//		creation = true;
//	}	

	private JComboBox<String> getEtatCivilJCB() throws Exception {
		JComboBox<String> etatCivilJCB = new JComboBox<String>();
		etatCivilJCB.addItem("Madame");
		etatCivilJCB.addItem("Mademoiselle");
		etatCivilJCB.addItem("Monsieur");
		return etatCivilJCB;
	}

	//affichage des diplomes précédents
	private JComboBox<String> getCursusJCB() throws Exception {
		JComboBox<String> cursusJCB = new JComboBox<String>();
		for(String s:Etudiant.diplome)
			cursusJCB.addItem(s);
		return cursusJCB;
	}

	private ActionListener abondonAction() {
		ActionListener abondonListener = new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				try {
					dos.abondon();
					vue.setVisible(false);
					dafa.actionPerformed(e);
				}
				catch (Exception ex){
					ex.printStackTrace();
				}
			}
		};
		return abondonListener;
	}

	private ActionListener recordAction() {
		ActionListener recordListener = new ActionListener() {
			@SuppressWarnings("unchecked")
			public void actionPerformed(ActionEvent e) {
				try {
					etu.setFormationContinue(new Boolean(((JCheckBox)attributs[2][2]).isSelected()));
					etu.setEtatCivil((String)(((JComboBox<String>)attributs[2][3]).getSelectedItem()));
					etu.setNom(((JTextField)attributs[2][4]).getText());
					etu.setPrenom(((JTextField)attributs[2][5]).getText());
					etu.setEmail(((JTextField)attributs[2][6]).getText());
					etu.setTelephone(((JTextField)attributs[2][7]).getText());
					etu.setAdresse(((JTextField)attributs[2][8]).getText());
					etu.setVille(((JTextField)attributs[2][9]).getText());
					etu.setPays(((JTextField)attributs[2][10]).getText());
					etu.setRedoublant(new Boolean(((JCheckBox)attributs[2][11]).isSelected()));
					etu.setEtablissementOrigine((String)(((JTextField)attributs[2][12]).getText()));
					etu.setCursusAnnee1(((JLabel)attributs[1][13]).getText(),(String)(((JComboBox<String>)attributs[2][13]).getSelectedItem()));
					etu.setCursusAnnee2(((JLabel)attributs[1][14]).getText(),(String)(((JComboBox<String>)attributs[2][14]).getSelectedItem()));
					etu.setCursusAnnee3(((JLabel)attributs[1][15]).getText(),(String)(((JComboBox<String>)attributs[2][15]).getSelectedItem()));
					etu.setCursusAnnee4(((JLabel)attributs[1][16]).getText(),(String)(((JComboBox<String>)attributs[2][16]).getSelectedItem()));
				}
				catch (Exception ex){
					ex.printStackTrace();
					JOptionPane.showMessageDialog(appli, ex.getMessage(), "Maj Etudiant : Attention",JOptionPane.ERROR_MESSAGE);
				}
			}
		};
		return recordListener;
	}

	private DocumentListener getTextFieldListener() {
		DocumentListener docListener = new DocumentListener() {
			public void changedUpdate(DocumentEvent e) {
				suite.setEnabled((((JTextField)attributs[2][4]).getText().length()>0)&&
						(((JTextField)attributs[2][5]).getText().length()>0)&&
						(((JTextField)attributs[2][6]).getText().length()>0)&&
						(((JTextField)attributs[2][7]).getText().length()>0)&&
						(((JTextField)attributs[2][8]).getText().length()>0)&&
						(((JTextField)attributs[2][9]).getText().length()>0)&&
						(((JTextField)attributs[2][10]).getText().length()>0));
			}
			public void insertUpdate(DocumentEvent e) {
				changedUpdate(e);
			}
			public void removeUpdate(DocumentEvent e) {
				changedUpdate(e);
			}
		};
		return docListener;
	}


	public Component getVue(){
		return vue;
	}

	public Dossier getDossier(){
		return dos;
	}

	@SuppressWarnings("unchecked")
	public void actionPerformed(ActionEvent e) {
		try {
			//int ind;
			if (!creation)
				dos = dafa.getSelectedDossier();
			if (dos != null) {
				vue = new JPanel();
				vue.setLayout(new BorderLayout());
				appli.add(vue,BorderLayout.CENTER);
				scrollpane = new JScrollPane();
				scrollpane.setBorder(new BevelBorder(BevelBorder.LOWERED));
				vue.add(scrollpane,BorderLayout.CENTER);

				fiche = new JPanel();
				fiche.setLayout(new GridLayout(0,3));
				scrollpane.setViewportView(fiche);

				JPanel pied = new JPanel();
				vue.add(pied, BorderLayout.SOUTH);
				abondon = new JButton("Abondon");
				abondon.addActionListener(abondonAction());
				pied.add(abondon);
				suite = new JButton("Suite");
				suite.setEnabled(false);
				daa = new DemandeAfficheAction(appli,dafa,this);
				suite.addActionListener(recordAction());
				suite.addActionListener(daa);
				pied.add(suite);
				String[] names = dafa.EnteteEtudiant;
				attributs = new JComponent[3][names.length];
				attributs[2][0] = new JLabel();
				attributs[2][1] = new JLabel();
				attributs[2][2] = new JCheckBox("");
				attributs[2][3] = getEtatCivilJCB();
				attributs[2][4] = new JTextField();
				attributs[2][5] = new JTextField();
				attributs[2][6] = new JTextField();
				attributs[2][7] = new JTextField();
				attributs[2][8] = new JTextField();
				attributs[2][9] = new JTextField();
				attributs[2][10] = new JTextField();
				attributs[2][11] = new JCheckBox("");
				attributs[2][12] = new JTextField();
				attributs[1][13] = new JLabel();
				attributs[2][13] = getCursusJCB();
				attributs[1][14] = new JLabel();
				attributs[2][14] = getCursusJCB();
				attributs[1][15] = new JLabel();
				attributs[2][15] = getCursusJCB();
				attributs[1][16] = new JLabel();
				attributs[2][16] = getCursusJCB();
				for (int i=0; i<names.length; i++){
					if (i < names.length -4){
						attributs[0][i]= new JLabel();
						attributs[1][i]= new JLabel(names[i]);
					}
					else
						attributs[0][i]= new JLabel(names[i]);
					fiche.add(attributs[0][i]);
					if(attributs[1][i]!=null)
						fiche.add(attributs[1][i]);
					fiche.add(attributs[2][i]);
				}
				// les listeners sur les "TextField" obligatoires
				for (int i=4; i<11; i++)
					((JTextField)attributs[2][i]).getDocument().addDocumentListener(getTextFieldListener());    
	
				etu = dafa.getSelectedDossier().getEtudiant();
				// initialisation des champs
				((JLabel)attributs[2][1]).setText(etu.getIdApoflux());
				((JLabel)attributs[2][0]).setText(etu.getDate().toString());
				((JCheckBox)attributs[2][2]).setSelected(etu.getFormationContinue());
				((JComboBox<String>)attributs[2][3]).setSelectedItem(etu.getEtatCivil());
				((JTextField)attributs[2][4]).setText(etu.getNom());
				((JTextField)attributs[2][5]).setText(etu.getPrenom());
				((JTextField)attributs[2][6]).setText(etu.getEmail());
				((JTextField)attributs[2][7]).setText(etu.getTelephone());
				((JTextField)attributs[2][8]).setText(etu.getAdresse());
				((JTextField)attributs[2][9]).setText(etu.getVille());
				((JTextField)attributs[2][10]).setText(etu.getPays());
				((JCheckBox)attributs[2][11]).setSelected(etu.getRedoublant());
				// specifique pour l'origine
				((JTextField)attributs[2][12]).setText(etu.getEtablissementOrigine());
				((JLabel) attributs[1][13]).setText(etu.getAnnéeCursusAnnée1());
				((JComboBox<String>)attributs[2][13]).setSelectedItem(etu.getNomCursusAnnée1());
				((JLabel)attributs[1][14]).setText(etu.getAnnéeCursusAnnée2());
				((JComboBox<String>)attributs[2][14]).setSelectedItem(etu.getNomCursusAnnée2());
				((JLabel)attributs[1][15]).setText(etu.getAnnéeCursusAnnée3());
				((JComboBox<String>)attributs[2][15]).setSelectedItem(etu.getNomCursusAnnée3());
				((JLabel)attributs[1][16]).setText(etu.getAnnéeCursusAnnée4());
				((JComboBox<String>)attributs[2][16]).setSelectedItem(etu.getNomCursusAnnée4());

				dafa.getVue().setVisible(false);
				vue.setVisible(true);
				appli.getFrame().setVisible(true);
			}
		}
		catch(Exception ex){
			ex.printStackTrace();
			JOptionPane.showMessageDialog(appli, ex.getMessage(), "Affichage Etudiant : Attention",JOptionPane.ERROR_MESSAGE);
		}
	}
}

